Page({
  // 思路参考https://github.com/lin-xin/blog/issues/14
  /**
   * 页面的初始数据
   */
  data: {
    carState:false,  //购物车是否有商品
    car:[], //购物车商品列表
    selectAll:true, //是否全选
    totalPrice:0, //初始化总价格
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    /*
      购物车列表数据我们一般是通过请求服务器拿到的数据，所以我们放在生命周期函数里给 carts 赋值。想到每次进到购物车都要获取购物车的最新状态，而onLoad和onReady只在初始化的时候执行一次，所以我需要把请求放在 onShow 函数里。(这里先拿点假数据冒充一下吧)
    */ 
    this.setData({
      carState:true,
      car:[
        { id: 1, title: '新鲜芹菜 半斤', image: '/image/s5.png', num: 4, price: 0.01, selected: false },
        { id: 2, title: '素米 500g', image: '/image/s6.png', num: 1, price: 0.03, selected: true }
      ]
    })
    this.gettotalPrice();
    this.isselectAll(); //调用全选
  },
  // 选择
  selectItem(e){
    var index = e.currentTarget.dataset.index;  //对应的索引
    var cars = this.data.car;
    cars[index].selected = !cars[index].selected; //取反
    
    // 更新
    this.setData({
      car: cars
    })
    this.isselectAll(); //调用全选
    // 算总价
    this.gettotalPrice();
  },
  //判断全选    判断是否下面该不该显示全选
  isselectAll() {
    var cars = this.data.car;
    // 2.0判断下面的全选时候该勾上或者去掉勾功能
    for (var i = 0; i < cars.length; i++) {
      if (!cars[i].selected) { //只要一个为FALSE，下面全选则没必要勾上
        this.setData({
          selectAll: false
        })
        return false;
      }
      this.setData({
        selectAll: true
      })
    }
  },
  // 全选
  selectAllItem(){
    var cars = this.data.car;
    var selectStatus = this.data.selectAll; //获取当前全选状态
    selectStatus = !selectStatus;  //取反，如果是全选，则显示不全选，否则反则反
    for (var i = 0; i < cars.length;i++){
      if (selectStatus){ //全选
        cars[i].selected=true ; //购物车状态全选上
      }else{
        cars[i].selected = false
      }
    }
    // 更新
    this.setData({
      selectAll: selectStatus,
      car:cars
    })
    // 最后计算价格操作加上
    this.gettotalPrice();
  },
  // 删除其中一个商品
  delItem(e){
    var index = e.currentTarget.dataset.index;  //对应的索引
    var cars = this.data.car;
    cars.splice(index,1); //数组删除
    // 2. 如果都删除完了，该页面应该显示没有商品，carState状态要改过来
    if(cars.length==0){
      this.setData({
        carState:false
      })
    }
    this.setData({
      car:cars
    })
    this.isselectAll(); //也需要调用判断是否全选，情况1，两个商品，第一个商品没勾选，第二个商品勾上，删除第一个，剩下第二个本来是勾选上的，所以全选也应该勾上，所以这里需调用一次
    this.gettotalPrice();
  },
  

  // 总价格计算，其他的改变，都要调用此方法计算价格
  gettotalPrice(){
    var cars=this.data.car;
    var totalPrice=0;
    for(var i=0;i<cars.length ;i++){
      if(cars[i].selected){ //选中才计算价格，
        totalPrice += cars[i].num * cars[i].price
      }
    }
    this.setData({
      totalPrice: totalPrice.toFixed(2)  //小数点保留2位
    })
  },
  // 数量增加
  addNum(e){
    // console.log(e.currentTarget.dataset.index)
    var index = e.currentTarget.dataset.index;  //对应的索引
    var cars = this.data.car;
    cars[index].num++
    this.setData({ //同时设置更新data的值
      car:cars
    })
    // 调用计算价格，更新价格
    this.gettotalPrice();
  },
  // 数量减少
  minusNum(e){
    var index = e.currentTarget.dataset.index;  //对应的索引
    var cars = this.data.car;
    console.log(index,cars)
    // 如果本来是1，则不能再继续少，否则才减1
    if (cars[index].num==1){
      return false;
    }
    cars[index].num--;
    this.setData({
      car:cars
    })

    this.gettotalPrice();

  }

  
})